let path = require('path')
let fs = require('fs')
let vm = require('vm')
function Module(id) {
  this.id = id
  this.exports= {}
}
Module.wrapper = [
 '(function(exports, module, require, __dirname, __filename){','})' 
]
Module._extensions = {
  '.js'(module) {
    let str = fs.readFileSync(module.id, 'utf8')
    // 包裹这个函数
    let scriptStr = Module.wrapper[0] + str + Module.wrapper[1]
    // 返回一个函数 
    let fn = vm.runInThisContext(scriptStr)
    fn.call(module.exports, module.exports, module, req)
  },
  '.json'(module) {
    let str = fs.readFileSync(module.id, 'utf8')
    module.exports = JSON.parse(str)
  }
}
Module.prototype.load = function () {
  // 如果这边  拿不到后缀名的话  
  // 那就添加后缀名一个个试 
  // 用  fs.accessSync  判断有没有存在 没有的话 就会报错
  // fs.accessSync
  
  let extname = path.extname(this.id)
  Module._extensions[extname](this)
}



function req(id) {
  let absPath = path.join(__dirname, id)
  console.log(absPath)
  let module = new Module(absPath)
  module.load()
  return module.exports
}

let r = req('./test/sum.js')

console.log(r(1,2))